<?php
/**
 * @author spenceryg
 * @date 2022/12/18
 * @time 9:46 上午
 * @focus love & life
 */


namespace app\common\lib;


class Dir
{
    /**
     * 创建目录
     */
    public static function create_dirs($path): int
    {
        if (!is_dir($path)) {
            $directory_path = "";
            $directories = explode("/", $path);
            array_pop($directories);

            foreach ($directories as $directory) {
                $directory_path .= $directory . "/";
                if (!is_dir($directory_path)) {
                    mkdir($directory_path);
                    chmod($directory_path, 0777);
                }
            }
            return 111;
        } else {
            return 222;
        }
    }

    /**
     * 删除文件夹以及所有内容
     * @param $dirName
     * @return bool
     */
    public static function removeDir($dirName): bool
    {
        if (!is_dir($dirName)) {
            return false;
        }
        $handle = @opendir($dirName);
        while (($file = @readdir($handle)) !== false) {
            //判断是不是文件 .表示当前文件夹 ..表示上级文件夹 =2
            if ($file != '.' && $file != '..') {
                $dir = $dirName . '/' . $file;
                is_dir($dir) ? self::removeDir($dir) : @unlink($dir);
            }
        }
        closedir($handle);
        @rmdir($dirName);
        return true;
    }

    /**
     * 删除dir内部的dir
     * @param $dirName
     * @return bool
     */
    public static function removeDirInnerDir($dirName): bool
    {
        if (!is_dir($dirName)) {
            return false;
        }
        $handle = @opendir($dirName);
        while (($file = @readdir($handle)) !== false) {
            //判断是不是文件 .表示当前文件夹 ..表示上级文件夹 =2
            if ($file != '.' && $file != '..') {
                $dir = $dirName . '/' . $file;
                if(is_dir($dir)){
                    @rmdir($dir);
                }
            }
        }
        closedir($handle);
        return true;
    }


    /**
     * @param $dirName
     * @return bool
     */
    public static function removeDirFile($dirName): bool
    {
        if (!is_dir($dirName)) {
            return false;
        }
        $handle = @opendir($dirName);
        while (($file = @readdir($handle)) !== false) {
            //判断是不是文件 .表示当前文件夹 ..表示上级文件夹 =2
            if ($file != '.' && $file != '..') {
                $dir = $dirName . '/' . $file;
                if(!is_dir($dir)) {
                    @unlink($dir);
                }
            }
        }
        closedir($handle);
        return true;
    }


    /**
     * 循环删除文件夹子内部的文件
     * @param $dirName
     * @param string $suffix
     * @return bool
     */
    public static function removeDirFileLoop($dirName, string $suffix = ''): bool
    {
        if (!is_dir($dirName)) {
            return false;
        }
        $handle = @opendir($dirName);
        while (($file = @readdir($handle)) !== false) {
            //判断是不是文件 .表示当前文件夹 ..表示上级文件夹 =2
            if ($file != '.' && $file != '..') {
                $dir = $dirName . '/' . $file;
                if(is_dir($dir)){
                    self::removeDirFileLoop($dir);
                }else{
                    $canDelete = true;
                    if($suffix){
                        $arr = explode('.', $file);
                        if($arr[sizeof($arr) - 1] !== $suffix) {
                            $canDelete = false;
                        }
                    }
                    if($canDelete){
                        @unlink($dir);
                    }
                }
            }
        }
        closedir($handle);
        return true;
    }
}
